import {
  CallHandler,
  ExecutionContext,
  HttpStatus,
  Injectable,
  NestInterceptor,
} from '@nestjs/common';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

// 定义一个接口，用于定义返回的数据结构
interface IData<T> {
  data: T;
}

// 将该类标记为可注入的
@Injectable()
export class ResponseInterceptor<T> implements NestInterceptor {
  // 实现NestInterceptor接口的intercept方法
  intercept(
    context: ExecutionContext,
    next: CallHandler,
  ): Observable<IData<T>> {
    // 调用next.handle()方法，获取返回的数据
    return next.handle().pipe(
      // 使用map操作符，对返回的数据进行处理
      map((data) => {
        // 返回一个新的数据结构，包含原始数据、成功标志、消息和状态码
        return {
          data,
          success: true,
          message: 'success',
          status: HttpStatus.OK,
        };
      }),
    );
  }
}
